home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac Interfaces / CIncludes / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  9.0 KB  |  339 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DPick.h
  3.  
  4.      Contains:    Q3Pick methods                                    
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.6
  7.                  Release:    QuickTime 4.0
  8.  
  9.      Copyright:    © 1995-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DPICK__
  18. #define __QD3DPICK__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24. #ifndef __QD3DSTYLE__
  25. #include <QD3DStyle.h>
  26. #endif
  27. #ifndef __QD3DGEOMETRY__
  28. #include <QD3DGeometry.h>
  29. #endif
  30.  
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=power
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53. #if PRAGMA_ENUM_ALWAYSINT
  54.     #pragma enumsalwaysint on
  55. #elif PRAGMA_ENUM_OPTIONS
  56.     #pragma option enum=int
  57. #elif PRAGMA_ENUM_PACK
  58.     #if __option(pack_enums)
  59.         #define PRAGMA_ENUM_PACK__QD3DPICK__
  60.     #endif
  61.     #pragma options(!pack_enums)
  62. #endif
  63.  
  64. /*****************************************************************************
  65.  **                                                                            **
  66.  **                            Mask bits for hit information                     **
  67.  **                                                                            **
  68.  *****************************************************************************/
  69.  
  70. enum TQ3PickDetailMasks {
  71.     kQ3PickDetailNone            = 0,
  72.     kQ3PickDetailMaskPickID        = 1 << 0,
  73.     kQ3PickDetailMaskPath        = 1 << 1,
  74.     kQ3PickDetailMaskObject        = 1 << 2,
  75.     kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  76.     kQ3PickDetailMaskXYZ        = 1 << 4,
  77.     kQ3PickDetailMaskDistance    = 1 << 5,
  78.     kQ3PickDetailMaskNormal        = 1 << 6,
  79.     kQ3PickDetailMaskShapePart    = 1 << 7,
  80.     kQ3PickDetailMaskPickPart    = 1 << 8,
  81.     kQ3PickDetailMaskUV            = 1 << 9
  82. };
  83. typedef enum TQ3PickDetailMasks TQ3PickDetailMasks;
  84.  
  85. typedef unsigned long                     TQ3PickDetail;
  86. /******************************************************************************
  87.  **                                                                             **
  88.  **                                Hitlist sorting                                 **
  89.  **                                                                             **
  90.  *****************************************************************************/
  91.  
  92. enum TQ3PickSort {
  93.     kQ3PickSortNone                = 0,
  94.     kQ3PickSortNearToFar        = 1,
  95.     kQ3PickSortFarToNear        = 2
  96. };
  97. typedef enum TQ3PickSort TQ3PickSort;
  98.  
  99.  
  100. /******************************************************************************
  101.  **                                                                             **
  102.  **                    Data structures to set up the pick object                 **
  103.  **                                                                             **
  104.  *****************************************************************************/
  105. #define kQ3ReturnAllHits        0
  106.  
  107. struct TQ3PickData {
  108.     TQ3PickSort                     sort;
  109.     TQ3PickDetail                     mask;
  110.     unsigned long                     numHitsToReturn;
  111. };
  112. typedef struct TQ3PickData                TQ3PickData;
  113.  
  114. struct TQ3WindowPointPickData {
  115.     TQ3PickData                     data;
  116.     TQ3Point2D                         point;
  117.     float                             vertexTolerance;
  118.     float                             edgeTolerance;
  119. };
  120. typedef struct TQ3WindowPointPickData    TQ3WindowPointPickData;
  121.  
  122. struct TQ3WindowRectPickData {
  123.     TQ3PickData                     data;
  124.     TQ3Area                         rect;
  125. };
  126. typedef struct TQ3WindowRectPickData    TQ3WindowRectPickData;
  127.  
  128. struct TQ3WorldRayPickData {
  129.     TQ3PickData                     data;
  130.     TQ3Ray3D                         ray;
  131.     float                             vertexTolerance;
  132.     float                             edgeTolerance;
  133. };
  134. typedef struct TQ3WorldRayPickData        TQ3WorldRayPickData;
  135.  
  136. /******************************************************************************
  137.  **                                                                             **
  138.  **                                    Hit data                                 **
  139.  **                                                                             **
  140.  *****************************************************************************/
  141.  
  142. struct TQ3HitPath {
  143.     TQ3GroupObject                     rootGroup;
  144.     unsigned long                     depth;
  145.     TQ3GroupPosition *                positions;
  146. };
  147. typedef struct TQ3HitPath                TQ3HitPath;
  148. /******************************************************************************
  149.  **                                                                             **
  150.  **                                Pick class methods                             **
  151.  **                                                                             **
  152.  *****************************************************************************/
  153. EXTERN_API_C( TQ3ObjectType )
  154. Q3Pick_GetType                    (TQ3PickObject             pick);
  155.  
  156. EXTERN_API_C( TQ3Status )
  157. Q3Pick_GetData                    (TQ3PickObject             pick,
  158.                                  TQ3PickData *            data);
  159.  
  160. EXTERN_API_C( TQ3Status )
  161. Q3Pick_SetData                    (TQ3PickObject             pick,
  162.                                  const TQ3PickData *    data);
  163.  
  164. EXTERN_API_C( TQ3Status )
  165. Q3Pick_GetVertexTolerance        (TQ3PickObject             pick,
  166.                                  float *                vertexTolerance);
  167.  
  168. EXTERN_API_C( TQ3Status )
  169. Q3Pick_GetEdgeTolerance            (TQ3PickObject             pick,
  170.                                  float *                edgeTolerance);
  171.  
  172. EXTERN_API_C( TQ3Status )
  173. Q3Pick_SetVertexTolerance        (TQ3PickObject             pick,
  174.                                  float                     vertexTolerance);
  175.  
  176. EXTERN_API_C( TQ3Status )
  177. Q3Pick_SetEdgeTolerance            (TQ3PickObject             pick,
  178.                                  float                     edgeTolerance);
  179.  
  180. EXTERN_API_C( TQ3Status )
  181. Q3Pick_GetNumHits                (TQ3PickObject             pick,
  182.                                  unsigned long *        numHits);
  183.  
  184. EXTERN_API_C( TQ3Status )
  185. Q3Pick_EmptyHitList                (TQ3PickObject             pick);
  186.  
  187. EXTERN_API_C( TQ3Status )
  188. Q3Pick_GetPickDetailValidMask    (TQ3PickObject             pick,
  189.                                  unsigned long             index,
  190.                                  TQ3PickDetail *        pickDetailValidMask);
  191.  
  192. EXTERN_API_C( TQ3Status )
  193. Q3Pick_GetPickDetailData        (TQ3PickObject             pick,
  194.                                  unsigned long             index,
  195.                                  TQ3PickDetail             pickDetailValue,
  196.                                  void *                    detailData);
  197.  
  198. EXTERN_API_C( TQ3Status )
  199. Q3HitPath_EmptyData                (TQ3HitPath *            hitPath);
  200.  
  201. /******************************************************************************
  202.  **                                                                             **
  203.  **                            Window point pick methods                         **
  204.  **                                                                             **
  205.  *****************************************************************************/
  206. EXTERN_API_C( TQ3PickObject )
  207. Q3WindowPointPick_New            (const TQ3WindowPointPickData * data);
  208.  
  209. EXTERN_API_C( TQ3Status )
  210. Q3WindowPointPick_GetPoint        (TQ3PickObject             pick,
  211.                                  TQ3Point2D *            point);
  212.  
  213. EXTERN_API_C( TQ3Status )
  214. Q3WindowPointPick_SetPoint        (TQ3PickObject             pick,
  215.                                  const TQ3Point2D *        point);
  216.  
  217. EXTERN_API_C( TQ3Status )
  218. Q3WindowPointPick_GetData        (TQ3PickObject             pick,
  219.                                  TQ3WindowPointPickData * data);
  220.  
  221. EXTERN_API_C( TQ3Status )
  222. Q3WindowPointPick_SetData        (TQ3PickObject             pick,
  223.                                  const TQ3WindowPointPickData * data);
  224.  
  225.  
  226. /******************************************************************************
  227.  **                                                                             **
  228.  **                            Window rect pick methods                         **
  229.  **                                                                             **
  230.  *****************************************************************************/
  231. EXTERN_API_C( TQ3PickObject )
  232. Q3WindowRectPick_New            (const TQ3WindowRectPickData * data);
  233.  
  234. EXTERN_API_C( TQ3Status )
  235. Q3WindowRectPick_GetRect        (TQ3PickObject             pick,
  236.                                  TQ3Area *                rect);
  237.  
  238. EXTERN_API_C( TQ3Status )
  239. Q3WindowRectPick_SetRect        (TQ3PickObject             pick,
  240.                                  const TQ3Area *        rect);
  241.  
  242. EXTERN_API_C( TQ3Status )
  243. Q3WindowRectPick_GetData        (TQ3PickObject             pick,
  244.                                  TQ3WindowRectPickData * data);
  245.  
  246. EXTERN_API_C( TQ3Status )
  247. Q3WindowRectPick_SetData        (TQ3PickObject             pick,
  248.                                  const TQ3WindowRectPickData * data);
  249.  
  250.  
  251. /******************************************************************************
  252.  **                                                                             **
  253.  **                            World ray pick methods                             **
  254.  **                                                                             **
  255.  *****************************************************************************/
  256. EXTERN_API_C( TQ3PickObject )
  257. Q3WorldRayPick_New                (const TQ3WorldRayPickData * data);
  258.  
  259. EXTERN_API_C( TQ3Status )
  260. Q3WorldRayPick_GetRay            (TQ3PickObject             pick,
  261.                                  TQ3Ray3D *                ray);
  262.  
  263. EXTERN_API_C( TQ3Status )
  264. Q3WorldRayPick_SetRay            (TQ3PickObject             pick,
  265.                                  const TQ3Ray3D *        ray);
  266.  
  267. EXTERN_API_C( TQ3Status )
  268. Q3WorldRayPick_GetData            (TQ3PickObject             pick,
  269.                                  TQ3WorldRayPickData *    data);
  270.  
  271. EXTERN_API_C( TQ3Status )
  272. Q3WorldRayPick_SetData            (TQ3PickObject             pick,
  273.                                  const TQ3WorldRayPickData * data);
  274.  
  275.  
  276.  
  277. /******************************************************************************
  278.  **                                                                             **
  279.  **                                Shape Part methods                             **
  280.  **                                                                             **
  281.  *****************************************************************************/
  282. EXTERN_API_C( TQ3ObjectType )
  283. Q3ShapePart_GetType                (TQ3ShapePartObject     shapePartObject);
  284.  
  285. EXTERN_API_C( TQ3ObjectType )
  286. Q3MeshPart_GetType                (TQ3MeshPartObject         meshPartObject);
  287.  
  288. EXTERN_API_C( TQ3Status )
  289. Q3ShapePart_GetShape            (TQ3ShapePartObject     shapePartObject,
  290.                                  TQ3ShapeObject *        shapeObject);
  291.  
  292. EXTERN_API_C( TQ3Status )
  293. Q3MeshPart_GetComponent            (TQ3MeshPartObject         meshPartObject,
  294.                                  TQ3MeshComponent *        component);
  295.  
  296. EXTERN_API_C( TQ3Status )
  297. Q3MeshFacePart_GetFace            (TQ3MeshFacePartObject     meshFacePartObject,
  298.                                  TQ3MeshFace *            face);
  299.  
  300. EXTERN_API_C( TQ3Status )
  301. Q3MeshEdgePart_GetEdge            (TQ3MeshEdgePartObject     meshEdgePartObject,
  302.                                  TQ3MeshEdge *            edge);
  303.  
  304. EXTERN_API_C( TQ3Status )
  305. Q3MeshVertexPart_GetVertex        (TQ3MeshVertexPartObject  meshVertexPartObject,
  306.                                  TQ3MeshVertex *        vertex);
  307.  
  308.  
  309.  
  310.  
  311. #if PRAGMA_ENUM_ALWAYSINT
  312.     #pragma enumsalwaysint reset
  313. #elif PRAGMA_ENUM_OPTIONS
  314.     #pragma option enum=reset
  315. #elif defined(PRAGMA_ENUM_PACK__QD3DPICK__)
  316.     #pragma options(pack_enums)
  317. #endif
  318.  
  319. #if PRAGMA_STRUCT_ALIGN
  320.     #pragma options align=reset
  321. #elif PRAGMA_STRUCT_PACKPUSH
  322.     #pragma pack(pop)
  323. #elif PRAGMA_STRUCT_PACK
  324.     #pragma pack()
  325. #endif
  326.  
  327. #ifdef PRAGMA_IMPORT_OFF
  328. #pragma import off
  329. #elif PRAGMA_IMPORT
  330. #pragma import reset
  331. #endif
  332.  
  333. #ifdef __cplusplus
  334. }
  335. #endif
  336.  
  337. #endif /* __QD3DPICK__ */
  338.  
  339.